package a04_Volatile;

import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @Author quan
 * @Description 观察内存不可见的现象
 * @Date 2023/5/5 22:20
 */
public class a01_MemoryInvisibility {
    //定义标志位
    private static int flag = 0;
    //用volatile修饰变量:注意观察与上述定义方法的结果区别
//    private static volatile int flag = 0;
    public static void main(String[] args) {
        //创建第一个线程，当flag为0 的时候一直循环
        Thread t1 = new Thread(()->{
            System.out.println("t1线程已经启动");
            //根据flag的标志不断的循环
            while (flag==0){
//                //TODO 要执行的代码
//                try {
//                    Thread.sleep(1);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
            }
            System.out.println("t1线程已经退出");
        });

        //创建第二个线程，同时修改标记位flag
        Thread t2 = new Thread(()->{
            System.out.println("t2线程已经启动");
            //修改标记位flag
            System.out.println("请输入整数：");
            Scanner scanner = new Scanner(System.in);
            flag = scanner.nextInt();
            System.out.println("t2线程已经退出");
        });
        //启动线程
        t1.start();
        t2.start();
    }
}
